# -*- coding: utf-8 -*-
'''
projecto- classe destinada as estatísticas
autor- Ana Isabel Marques 6052
data de criação do módulo- 01/12/2011
'''

import sqlite3

######################################################
#Criação das Estatísticas
######################################################
class obter_estatisticas:
    
    #Construtor
    def __init__(self):
        pass

    #Este método acede a toda a informação da Base de Dados, num determinado ano,
    #em que o ano é escolhido pelo utilizador, ou seja, acede apenas a uma tabela
    def estatisticas_ano(self, ano):

        conn = sqlite3.connect('rebides.db')
        conn.text_factory = str
        cursor = conn.cursor()

        a = ano - 2000
        cursor.execute("""SELECT * FROM reb{0}""".format(a))

        informacao_estatisticas = cursor.fetchall()
        
        cursor.close()

        return informacao_estatisticas
    

    #Este método procura na base de dados criada, todos
    #os estabelecimentos de ensino existentes, do respectivo ano
    #em que o ano é escolhido pelo utilizador
    def obter_estabelecimentos(self):

        for y in range (2000, 2011):
            informacao_estatisticas = self.estatisticas_ano(y)
            listaEstabelecimentos = []

            for x in range (0, len(informacao_estatisticas)):
                listaEstabelecimentos.append(informacao_estatisticas[x][8])
                pass
            pass
        estabelecimentos = list(set(listaEstabelecimentos))
                        
        return estabelecimentos

    #Este método procura na base de dados criada, todas
    #as categorias profissionais existentes num determinado ano,
    #em que o ano foi escolhido pelo utilizador
    def obter_categorias_profissionais(self):

        for y in range (2000, 2011):
            informacao_estatisticas = self.estatisticas_ano(y)

            listaCategoriasProfissionais = []

            for x in range (0, len(informacao_estatisticas)):
                listaCategoriasProfissionais.append(informacao_estatisticas[x][4])
                pass
            pass
        categorias_profissionais = list(set(listaCategoriasProfissionais))
              
        return categorias_profissionais

    #Este método procura na base de dados criada, todos
    #os graus de ensino existentes num determinado ano,
    #em que o ano é escolhido pelo utilizador
    def obter_graus_ensino(self):
        for y in range (2000, 2011):
            informacao_estatisticas = self.estatisticas_ano(y)
            
            listaGrausEnsino = []

            for x in range (0, len(informacao_estatisticas)):
                listaGrausEnsino.append(informacao_estatisticas[x][2])
                pass
            pass

        graus_ensino = list(set(listaGrausEnsino)) 
        
        return graus_ensino
        
    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por estabelecimento
    #e por ano, em que o ano e o estabelecimento são es-
    #colhidos pelo utilizador.
    #Retorna o número total de docentes
    def numero_docentes_ano_estabelecimento(self, estabelecimento, ano):
        informacao_estatisticas = self.estatisticas_ano(ano)
        
        numeroDocentes = 0

        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    numeroDocentes = numeroDocentes + 1
                    pass
                pass
            pass
        return numeroDocentes

    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por estabelecimento
    #e por ano, em que o ano e o estabelecimento são es-
    #colhidos pelo utilizador.
    #Retorna a lista de docentes
    def lista_docentes_ano_estabelecimento(self, estabelecimento, ano):
        informacao_estatisticas = self.estatisticas_ano(ano)

        listaDocentes = []
        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    listaDocentes.append(informacao_estatisticas[x][1])
                    pass
                pass
            pass
        
        return listaDocentes
        
    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por categoria, esta-
    #belecimento e por ano, em que a categoria, o ano e
    #o estabelecimento são escolhidos pelo utilizador
    #Retorna o número de docentes
    def numero_docentes_ano_estabelecimento_categoria(self, ano, estabelecimento, categoria):
        informacao_estatisticas = self.estatisticas_ano(ano)
        numeroDocentes = 0
        
        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    if(informacao_estatisticas[x][4] == categoria):
                        numeroDocentes = numeroDocentes + 1
                    pass
                pass
            pass
        return numeroDocentes

    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por categoria, esta-
    #belecimento e por ano, em que a categoria, o ano e
    #o estabelecimento são escolhidos pelo utilizador
    #Retorna a lista de docentes
    def lista_docentes_ano_estabelecimento_categoria(self, ano, estabelecimento, categoria):
        informacao_estatisticas = self.estatisticas_ano(ano)
        listaDocentes = []
        
        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    if(informacao_estatisticas[x][4] == categoria):
                        listaDocentes.append(informacao_estatisticas[x][1])
                    pass
                pass
            pass
        
        return listaDocentes 
    
    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por grau de ensino,
    #estabelecimento e por ano, em que o grau de ensino,
    #o ano e o estabelecimento são escolhidos pelo utilizador
    #Retorna o numero de docentes
    def numero_docentes_ano_estabelecimento_grau(self, ano, estabelecimento, grau):
        informacao_estatisticas = self.estatisticas_ano(ano)
        numeroDocentes = 0

        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    if(informacao_estatisticas[x][2] == grau):
                        numeroDocentes = numeroDocentes + 1
                    pass
                pass
            pass
        
        return numeroDocentes

    #Este método procura na base de dados criada, todos
    #os docentes do ensino superior por grau de ensino,
    #estabelecimento e por ano, em que o grau de ensino,
    #o ano e o estabelecimento são escolhidos pelo utilizador
    #Retorna a lista de docentes
    def lista_docentes_ano_estabelecimento_grau(self, ano, estabelecimento, grau):
        informacao_estatisticas = self.estatisticas_ano(ano)

        listaDocentes = []
    
        for x in range (0, len(informacao_estatisticas)):
            if(informacao_estatisticas[x][6] == ano):
                if(informacao_estatisticas[x][8] == estabelecimento):
                    if(informacao_estatisticas[x][2] == grau):
                        listaDocentes.append(informacao_estatisticas[x][1])
                    pass
                pass
            pass
        
        return listaDocentes

